package astar.view;

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.Line2D;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.awt.Point;

/**
*
*
* @author Artur Ataide, Andre Ventura
* @date Junho 2014
*
*/
public class WriteImage extends Component{

	private BufferedImage img;
	private ArrayList<Point> closedList;

	/**
	*
	* Construtor da classe WriteImage. Esta classe extende um 'component', pois 
	* assim permite que seja desenhado na JFrame presente no controller.Main
	* o conteudo que for desenhado no método 'paint' desta classe.
	*
	* @param img BufferedImage com a imagem a ser desenhada na JFrame.
	* @param closedList ArrayList com os pontos que irão ser desenhados, formando
	* assim o caminho com menor custo ente um ponto e outro.
	* @param filename String com o nome do ficheiro a ser lido.
	*
	*/
	public WriteImage(BufferedImage img, ArrayList<Point> closedList, String filename){
		this.img = img;
		this.closedList = closedList;
		System.out.println("\n=================================\n"
				+ "A* Pathfind\n=================================");
		System.out.println("\nReading image " + filename
			+ "\n=================================\n");
	}

	/**
	*
	* Método que desenha a imagem e os pontos do caminho. Estes dois componentes
	* serão apresentados na JFrame.
	*
	*/
	public void paint(Graphics g){
		g.drawImage(this.img, 0, 0, 512, 512, null);

		for (Point p : this.closedList) {
			Line2D currentLine = new Line2D.Double(p.x, p.y, p.x, p.y);
			Graphics2D g2 = (Graphics2D) g;
			g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
				RenderingHints.VALUE_ANTIALIAS_ON);
			g2.setColor(Color.RED);
			g2.draw(currentLine);
		}

		char [] text = { 's', 't', 'a', 'r', 't', ' ', 'p', 'o', 'i', 'n', 't',
			'e', 'n', 'd',' ', 'p', 'o', 'i', 'n', 't' };
   		g.drawChars(text, 0, 11, 205, 50);
   		g.drawChars(text, 11, 9, 270, 500);
	}
}